A Direct Memory Access Controller (DMAC) is a common device used to transfer blocks of data between memory locations. The DMAC is used to reduce the workload from a processor and make memory transfers automatic. A conventional digital signal processor subsystem DMAC uses memory located data structures to program the DMAC. Descriptors in the data structures contain information to program the DMAC registers for a single block transfer. Once the descriptors are loaded into the data structures, the DMAC is activated by the processor.
A single activation causes the DMAC to execute a single task defined by the descriptors. To initiate the DMAC for the next task execution, the processor monitors the DMAC for completion of the active task. Monitoring by the processor involves either receiving an interrupt signal from the DMAC or by polling a status register of the DMAC.
Both monitoring procedures consume many processor cycles, especially when the processor produces many “small” tasks for the DMAC. In addition, the initialization of each new task for the DMAC reduces an operating efficiency of the DMAC. In particular, a new task might be added only when execution of the previous task has completed. If the DMAC is used to copy data between input and output buffers of hardware accelerators, the processor should be always used for synchronization between the tasks.